package com.baishancloud.log.common.util.other

import com.baishancloud.log.format.scala.Origin

import java.util.Objects

/**
 * 对日志数据进行时间过滤，以支持主题数据的无缝切换
 *
 * @author ziqiang.wang 
 * @date 2022/4/1 11:35
 */
object DataTimeFilterUtil extends Serializable {

  /**
   * 对 origin 类型的日志进行最大时间过滤，也就是设置的终止时间，判断条件为：小于
   *
   * @param origin    origin 类型的日志
   * @param maxSecond 最大时间的秒值
   * @return 满足条件为true，反之为false
   */
  def secondFilterMax(origin: Origin, maxSecond: Long): Boolean = {
    origin.datetimeOfUTC().toEpochSecond < maxSecond
  }

  /**
   * 对 origin 类型的日志进行最小时间过滤，也就是设置的开始时间，判断条件为：大于等于
   *
   * @param origin    origin 类型的日志
   * @param minSecond 最小时间的秒值
   * @return 满足条件为true，反之为false
   */
  def secondFilterMin(origin: Origin, minSecond: Long): Boolean = {
    origin.datetimeOfUTC().toEpochSecond >= minSecond
  }


  /**
   * 对 origin 类型的日志中的指定域名进行最大时间过滤，也就是对该域名设置的终止时间，判断条件为：小于
   *
   * @param origin    origin 类型的日志
   * @param domain    要过滤的域名
   * @param maxSecond 最大时间的秒值
   * @return 满足条件为true，反之为false
   */
  def domainSecondFilterMax(origin: Origin, domain: String, maxSecond: Long): Boolean = {
    if (Objects.equals(origin.domain(), domain)) {
      origin.datetimeOfUTC().toEpochSecond < maxSecond
    } else {
      true
    }
  }


  /**
   * 对 origin 类型的日志中的指定域名进行最小时间过滤，也就是对该域名设置的开始时间，判断条件为：大于等于
   *
   * @param origin    origin 类型的日志
   * @param domain    要过滤的域名
   * @param minSecond 最小时间的秒值
   * @return 满足条件为true，反之为false
   */
  def domainSecondFilterMin(origin: Origin, domain: String, minSecond: Long): Boolean = {
    if (Objects.equals(origin.domain(), domain)) {
      origin.datetimeOfUTC().toEpochSecond >= minSecond
    } else {
      true
    }
  }


  /**
   * 对 origin 类型的日志中的指定域名进行最大时间过滤，也就是对该域名设置的终止时间，判断条件为：小于
   *
   * @param origin    origin 类型的日志
   * @param domains   要过滤的域名列表
   * @param maxSecond 最大时间的秒值
   * @return 满足条件为true，反之为false
   */
  def domainSecondFilterMax(origin: Origin, domains: Set[String], maxSecond: Long): Boolean = {
    if (domains.contains(origin.domain())) {
      origin.datetimeOfUTC().toEpochSecond < maxSecond
    } else {
      true
    }
  }

  /**
   * 对 origin 类型的日志中的指定域名进行最小时间过滤，也就是对该域名设置的开始时间，判断条件为：大于等于
   *
   * @param origin    origin 类型的日志
   * @param domains   要过滤的域名列表
   * @param minSecond 最小时间的秒值
   * @return 满足条件为true，反之为false
   */
  def domainSecondFilterMin(origin: Origin, domains: Set[String], minSecond: Long): Boolean = {
    if (domains.contains(origin.domain())) {
      origin.datetimeOfUTC().toEpochSecond >= minSecond
    } else {
      true
    }
  }

}
